package command;

import beans.ListeNouvelles;
import beans.ListeTagNouvelle;
import beans.NouvelleBean;
import beans.TagNouvelleBean;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class PersoCommand implements Command {

    @Override
    public String getCommandName() {
        return "persoCommand";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
        String vue = "perso";
        String erreur = "erreur";
        
	System.out.println(this.getCommandName());
	
        // Redirection avant traitement si le formulaire n'a pas été soumis
	if (request.getParameter("addNouvelleSubmit") == null) {
	    return new ActionFlow(vue, vue + ".jsp", false);
	}
        
	ListeNouvelles listeNouvelles;
	ListeTagNouvelle listeTagNouvelle;
	try {
	    // On récupère la liste de flux du ServletContext
	    listeNouvelles = (ListeNouvelles) request.getServletContext().getAttribute("listeNouvelles");
	    // On récupère la liste de tags du ServletContext
	    listeTagNouvelle = (ListeTagNouvelle) request.getServletContext().getAttribute("listeTagNouvelle");
	} catch (Exception ex) {
	    Logger.getLogger(PersoCommand.class.getName()).log(Level.SEVERE, null, ex);
	    return new ActionFlow(erreur, erreur + ".html", true);
	}
        
	String titre = request.getParameter("titre");
	String texte = request.getParameter("texte");
        int id_flux = Integer.parseInt(request.getParameter("id_flux"));
	String[] tags = request.getParameter("tags").split(";");

	// si les formulaires ne sont pas remplis
	if (titre.equals("")) {
	    request.setAttribute("erreur", "Erreur : la nouvelle doit avoir un titre.");
	} else {
	    if (texte.equals("")) {
		request.setAttribute("erreur", "Erreur : la nouvelle doit contenir un texte.");
	    } else {
                GregorianCalendar calendar = new GregorianCalendar(); 
                String date = calendar.get(Calendar.YEAR)+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.DAY_OF_MONTH); //format AAAA-MM-JJ sous derby
                NouvelleBean nb = new NouvelleBean(0, id_flux, 1, titre, texte, date);
                int idNouvelle = listeNouvelles.addNouvelle(nb);
                nb.setId_nouvelle(idNouvelle);
                for (String tag : tags) {
                    if ((tag != null) && (!tag.equals(""))) {
                        listeTagNouvelle.addTagNouvelle(new TagNouvelleBean(0, tag), nb);
                    }
                }
            }
	}
        return new ActionFlow(vue, vue + ".jsp", false);
    }

}
